package com.audaque.springboot.foshanupload.web.webdemo.mapper;

import com.audaque.springboot.foshanupload.web.webdemo.model.domain.Student;
import com.audaque.springboot.foshanupload.web.webdemo.model.dto.StudentDTO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;

import java.util.List;


/**
 1.componentModel = “XX” 四个属性值
    default: 默认的情况，mapstruct不使用任何组件类型, 可以通过Mappers.getMapper(Class)方式获取自动生成的实例对象。
    cdi: the generated mapper is an application-scoped CDI bean and can be retrieved via @Inject
    spring（经常使用）: 生成的实现类上面会自动添加一个@Component注解，可以通过Spring的 @Autowired方式进行注入
    jsr330: 生成的实现类上会添加@javax.inject.Named 和@Singleton注解，可以通过 @Inject注解获取。
 2. unmappedTargetPolicy=ReportingPolicy.XX 三个属性值
     在未使用source值填充映射方法的target的属性的情况下要应用的默认报告策略
     - IGNORE 将被忽略
     - WARN 构建时引起警告
     - ERROR 映射代码生成失败


 3.当类型不一致时，mapstruct会帮我们做自动转换，但是自动转换类型有限,能够自动转换的类型
    基本类型及其包装类
    基本类型的包装类型和String类型之间
    String类型和枚举类型之间
    自定义常量


 */
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface StudentMapper {


    //转换对象
    StudentDTO toStudentDTO(Student student);

    //转换集合
    List<StudentDTO> toListStudentDTO(List<Student> student);
}
